package com.ruoyi.coffee.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.coffee.enums.AttributeTypeEnums;
import com.ruoyi.coffee.vo.AttributeVo;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import org.springframework.stereotype.Service;
import com.ruoyi.coffee.mapper.AttributesMapper;
import com.ruoyi.coffee.domain.Attributes;
import com.ruoyi.coffee.service.IAttributesService;

import javax.annotation.Resource;

/**
 * 咖啡属性Service业务层处理
 *
 * @author dxj
 * @date 2025-01-05
 */
@Service
public class AttributesServiceImpl extends ServiceImpl<AttributesMapper, Attributes> implements IAttributesService {
    @Resource
    private AttributesMapper attributesMapper;

    /**
     * 查询咖啡属性
     *
     * @param id 咖啡属性主键
     * @return 咖啡属性
     */
    @Override
    public Attributes selectAttributesById(Long id) {
        return attributesMapper.selectAttributesById(id);
    }

    /**
     * 查询咖啡属性列表
     *
     * @param attributes 咖啡属性
     * @return 咖啡属性
     */
    @Override
    public List<Attributes> selectAttributesList(Attributes attributes) {
        return attributesMapper.selectAttributesList(attributes);
    }

    /**
     * 新增咖啡属性
     *
     * @param attributes 咖啡属性
     * @return 结果
     */
    @Override
    public int insertAttributes(Attributes attributes) {
        attributes.setCreateTime(DateUtils.getNowDate());
        return attributesMapper.insertAttributes(attributes);
    }

    /**
     * 修改咖啡属性
     *
     * @param attributes 咖啡属性
     * @return 结果
     */
    @Override
    public int updateAttributes(Attributes attributes) {
        attributes.setUpdateTime(DateUtils.getNowDate());
        return attributesMapper.updateAttributes(attributes);
    }

    /**
     * 批量删除咖啡属性
     *
     * @param ids 需要删除的咖啡属性主键
     * @return 结果
     */
    @Override
    public int deleteAttributesByIds(Long[] ids) {
        return attributesMapper.deleteAttributesByIds(ids);
    }

    /**
     * 删除咖啡属性信息
     *
     * @param id 咖啡属性主键
     * @return 结果
     */
    @Override
    public int deleteAttributesById(Long id) {
        return attributesMapper.deleteAttributesById(id);
    }

    /**
     * 查询属性列表
     *
     * @return
     */
    @Override
    public HashMap<String, Object> findList() {
        //map存放属性列表
        HashMap<String, Object> map = new HashMap<>();
        // 查询温度
        List<AttributeVo> heatListVo = getAttributeList(AttributeTypeEnums.HEAT.getAttributeTypeValue());
        // 查询浓度
        List<AttributeVo> densityListVo = getAttributeList(AttributeTypeEnums.DENSITY.getAttributeTypeValue());
        // 封装数据
        map.put("heatList", heatListVo);
        map.put("densityList", densityListVo);
        return map;
    }

    /**
     * 根据属性类型查询属性列表
     *
     * @param attributeTypeValue
     * @return
     */
    private List<AttributeVo> getAttributeList(Integer attributeTypeValue) {
        LambdaQueryWrapper<Attributes> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.select(Attributes::getId, Attributes::getProductAttribute, Attributes::getPriceAdjustment, Attributes::getAttributeType)
                .eq(Attributes::getAttributeType, attributeTypeValue);

        return baseMapper.selectList(queryWrapper).stream()
                .map(item -> {
                    AttributeVo attributeVo = new AttributeVo();
                    BeanUtils.copyProperties(item, attributeVo);
                    attributeVo.setAttributeTypeName(AttributeTypeEnums.fromValueType(attributeTypeValue).getAttributeTypeName());
                    return attributeVo;
                })
                .collect(Collectors.toList());
    }


}
